//////////////////////////////////////////////////////////////////////////
// $Id: DepthSurface.cpp,v 1.1 2009/04/03 12:46:11 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#include "Local.h"

//////////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////

	DepthSurface::DepthSurface( const Context* rc )
	{
		CHECK(rc);
		mRCPtr = (Context*)rc;
		mHandle = NULL;
	}

	DepthSurface::~DepthSurface() 
	{
		if((IDirect3DSurface9*)mHandle){((IDirect3DSurface9*)mHandle)->Release(); mHandle = NULL;}
	}

	//////////////////////////////////////////////////////////////////////////
	
	/*
	====================
	load
	====================
	*/
	INLINE VOID DepthSurface::load( const VOID* data, U32 size )
	{
		CHECK(data);

		// check the data header
		U8 * data_ptr = (U8*)data;

		// get the format
		U32 format = *(U32*)data_ptr;
		data_ptr += sizeof(U32);

		// get the width
		U32 width = *(U32*)data_ptr;
		data_ptr += sizeof(U32);

		// get the height
		U32 height = *(U32*)data_ptr;
		data_ptr += sizeof(U32);

		// create the surface
		IDirect3DSurface9 *d3d9Surface = NULL;
		HRESULT hr = ((IDirect3DDevice9*)mRCPtr->handle())->CreateDepthStencilSurface(width, height, (D3DFORMAT)format, D3DMULTISAMPLE_NONE, 0, TRUE, &d3d9Surface, NULL);
		if(FAILED(hr)) MAssert(VA("DepthSurface::load : create the surface is failed(%s)!", DXGetErrorDescription(hr)));
		mHandle = (HANDLE)d3d9Surface;
	}

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////
